package BloodTimeHybernateDO;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import org.hibernate.annotations.Cascade;
import org.hibernate.annotations.CascadeType;
import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;
import org.hibernate.annotations.Proxy;

import dao.api.DataObject;

/**
 * 
 * @author Armando G. Lozada N
 * 
 */
@Entity
@Table(name = "propiedad")
@Proxy(lazy = false)
@SequenceGenerator(name = "propiedad_sequence", sequenceName = "propiedad_sequence", allocationSize=1
)

public class PropiedadDO implements DataObject{

	// -------------------------------
	// Identificador auto-incremental
	// -------------------------------
	private int id;

	// -------------------
	// Atributos de Propiedad
	// -------------------

	private String nombre;
	private String descripcion;
	private byte [] imagen;
	private float precioCompra;
	private float precioVenta;
	private int minEsclavos;
	private int gananciaSangre;
	private float gananciaDinero;

	// ------------
	// Referencias
	// ------------

	private List<PropiedadVampiroDO> propiedadVampiroList = //
		new ArrayList<PropiedadVampiroDO>();

	// ----------------------------------------------------------------

	// ------------
	// Metodos de la Clase Propiedad
	// ------------

	public PropiedadDO() {
		// Empty
	}

	@Override
	@Id
	@GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "propiedad_sequence")

	public int getId() {
		return id;
	}

	@Override
	public void setId(int id) {
		this.id = id;
	}

	public String getNombre() {
		return nombre;
	}

	public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public String getDescripcion() {
		return descripcion;
	}

	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}

	public byte [] getImagen() {
		return imagen;
	}

	public void setImagen(byte [] imagen) {
		this.imagen = imagen;
	}

	public float getPrecioCompra() {
		return precioCompra;
	}

	public void setPrecioCompra(float precioCompra) {
		this.precioCompra = precioCompra;
	}

	public float getPrecioVenta() {
		return precioVenta;
	}

	public void setPrecioVenta(float precioVenta) {
		this.precioVenta = precioVenta;
	}

	public int getMinEsclavos() {
		return minEsclavos;
	}

	public void setMinEsclavos(int minEsclavos) {
		this.minEsclavos = minEsclavos;
	}

	public int getGananciaSangre() {
		return gananciaSangre;
	}

	public void setGananciaSangre(int gananciaSangre) {
		this.gananciaSangre = gananciaSangre;
	}

	public float getGananciaDinero() {
		return gananciaDinero;
	}

	public void setGananciaDinero(float gananciaDinero) {
		this.gananciaDinero = gananciaDinero;
	}

	@OneToMany(mappedBy = "propiedadId")
	@LazyCollection(LazyCollectionOption.FALSE)
	@Cascade( { CascadeType.ALL, CascadeType.DELETE_ORPHAN })
	public List<PropiedadVampiroDO> getPropiedadVampiroList() {
		return propiedadVampiroList;
	}


	public void setPropiedadVampiroList(List<PropiedadVampiroDO> propiedadVampiroList) {
		this.propiedadVampiroList = propiedadVampiroList;
	}

}